﻿Imports System.Collections.ObjectModel  


Class CMConfigBench

Private nombreEnEdicion  As CTNombresBench 




    Public Sub New()
                
        InitializeComponent()
        Mouse.OverrideCursor = Nothing              
        Dim negocio As New CBenchServicio() 
        dim lstNombresBench As ObservableCollection (Of CTNombresBench)

        lstNombresBench = negocio.obtenerCvesBenchDecalogT() 
        Me.grdNombresBench.ItemsSource =  lstNombresBench
        Me.grdNombresBench.Items.Refresh ()
        
    End Sub


    Private Sub grdNombresBench_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdNombresBench.CellEditEnding          
   
        Dim nombres      As ObservableCollection(Of CTNombresBench) = grdNombresBench.ItemsSource
        Dim nombreActual As CTNombresBench 
        Dim nombreCambio As New CTNombresBench()
      

        Dim negocio As New CBenchServicio () 
                       
        
        Select Case e.EditAction

            Case DataGridEditAction.Commit

              If not sender.CurrentItem is Nothing then

                    Dim txtContenidoCelda_1 As Object   = grdNombresBench.Columns(0).GetCellContent(grdNombresBench.CurrentItem)         
                    Dim txtContenidoCelda_2 As Object   = grdNombresBench.Columns(1).GetCellContent(grdNombresBench.CurrentItem)         
                    nombreActual = TryCast(grdNombresBench.CurrentCell.Item, CTNombresBench)


                    If nombreActual.Equals (nombreEnEdicion) = False then 
                         CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
                    End If
                                        
                    
                   nombreCambio.NomBenchRiesgo = txtContenidoCelda_1.text 
                   nombreCambio.NomBenchDecalog = txtContenidoCelda_2.text 
                   nombreCambio.EsEditableNuevo = nombreActual.EsEditableNuevo  
                    
                    


                    If nombreCambio.EsEditableNuevo Then
                        Try
                            nombreCambio.EsEditableNuevo = False                                                                    
                            negocio.AltaNombreBench (nombreCambio.NomBenchRiesgo,nombreCambio.NomBenchDecalog)                                                        
                            nombreActual.NomBenchRiesgo  = nombreCambio.NomBenchRiesgo
                            nombreActual.NomBenchDecalog = nombreCambio.NomBenchDecalog
                            nombreActual.EsEditableNuevo = False    

                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el nombre Bench """ & nombreCambio.NomBenchRiesgo & ": " & ex.Message, "Nombres Bench", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try                   
                    else

                        Try
                           negocio.ActualizarNombreBench (nombreActual.NomBenchRiesgo, nombreActual.NomBenchDecalog , nombreCambio.NomBenchRiesgo, nombreCambio.NomBenchDecalog  )
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el nombre Bench """ & nombreCambio.NomBenchRiesgo & ": " & ex.Message, "Nombres Bench", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try 

                    End If
               else
                  CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
               End If

            Case DataGridEditAction.Cancel
                 
                nombreCambio = TryCast(grdNombresBench.Items(grdNombresBench.Items.Count - 1),CTNombresBench )
                
                if nombreCambio.EsEditableNuevo then 
                   nombres.Remove(nombreCambio)                    
                    grdNombresBench.UpdateLayout()                          
                End If


        End Select


        nombreEnEdicion = Nothing 

    End Sub

    Private Sub grdNombresBench_BeginningEdit(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdNombresBench.BeginningEdit
       nombreEnEdicion = grdNombresBench.CurrentItem    
    End Sub    

    Private Sub imgAgregarBench_MouseLeftButtonUp(ByVal sender As System.Object , ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgAgregarBench.MouseLeftButtonUp
          
          Dim regNvo As new CTNombresBench("Escriba aqui...","",true)
  
          Dim lstNombres As new ObservableCollection (Of CTNombresBench)
          
           lstNombres = grdNombresBench.ItemsSource 
           lstNombres.Add (regNvo)             
           grdNombresBench.ScrollIntoView (grdNombresBench.Items(grdNombresBench.Items.Count-1))
           grdNombresBench.UpdateLayout()
  

          Dim celda As DataGridCell  = ObtenerCelda (grdNombresBench,grdNombresBench.Items.Count-1,0)
          If Not celda is Nothing 
            celda.Focus()
            grdNombresBench.BeginEdit () 
            celda.IsSelected = true    
          End If


    End Sub

    Private Sub imgEliminarBench_MouseLeftButtonUp(ByVal sender As System.Object , ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgEliminarBench.MouseLeftButtonUp

         Dim nombres As ObservableCollection(Of CTNombresBench  ) = grdNombresBench.ItemsSource
         Dim nombreElim As new ObservableCollection(Of CTNombresBench )
         Dim nombreNoElim As new ObservableCollection(Of CTNombresBench  )

         Dim NombresNoElimTx As new System.Text.StringBuilder ()

         Dim negocio As New CBenchServicio () 

        Try

        

          If grdNombresBench.SelectedCells.Count > 0 then
             If MessageBox.Show ("Esta seguro que desea eliminar los nombres seleccionados","Eliminar nombres Bench",MessageBoxButton.OKCancel,MessageBoxImage.Question ) =MessageBoxResult.OK then      
     
                     For Each celda As DataGridCellInfo In grdNombresBench.SelectedCells                                
                        nombreElim.Add (CType(celda.Item,CTNombresBench))       
                     Next

                     For Each nombre As CTNombresBench  In nombreElim  
                        If negocio.EliminarNombreBench (nombre.NomBenchRiesgo,nombre.NomBenchDecalog ) then 
                            nombres.Remove(nombre)
                         else
                            nombreNoElim.Add (nombre)
                        End If
                                         
                     Next

              End If
          End If

         grdNombresBench.UpdateLayout ()


         If nombreNoElim.Count > 0 then             
            For Each nombre As  CTNombresBench  In nombreNoElim
                NombresNoElimTx.Append (nombre.NomBenchRiesgo  & "-" & nombre.NomBenchDecalog  )
                NombresNoElimTx.Append (", ")
            Next

            MessageBox.Show ("Los nombres Bench: " & NombresNoElimTx.ToString () & " no pudieron ser eliminados.", "Eliminar nombres Bench",MessageBoxButton.OK,MessageBoxImage.Exclamation ) 

         End If


      Catch ex As Exception
            MessageBox.Show("Error TI500. " & ex.Message, "Eliminar nombres Bench", MessageBoxButton.OK, MessageBoxImage.Error)
       End Try


    End Sub

    Private Function  ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer  ) As DataGridCell 

        Try
              Dim row as DataGridRow  = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)            
              Dim cellContent As Object  = miDataGrid.Columns(indexCol).GetCellContent(row)     
         
              Dim objDepend As DependencyObject = cellContent
              Dim celda As DataGridCell = Nothing       
        
               While not objDepend is Nothing 
        
                    If objDepend.GetType().Name = "DataGridCell" then 
                       celda = objDepend           
                       Return celda                                                      
                    End If
                   objDepend = VisualTreeHelper.GetParent (objDepend)   
              End While
        Catch ex As Exception
            Throw ex
        End Try
        
        Return Nothing 
End Function


End Class
